



import requests
from bs4 import BeautifulSoup


# 根据流程进行爬取：
"""
1、定义爬取目标链接  start_url
2、定义下载链接  download_url   https://music.163.com/song/media/outer/url?   拼接+  id=440353010
"""
start_url = "https://music.163.com/playlist?id=6600958231"
# 需要下载的链接
download_url = "https://music.163.com/song/media/outer/url?"  # 拼接如  id=440353010

# 定义一个请求头
headers = {
    #用户身份
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"
}
# 调用请求方法，给两个参数  1、请求的链接，2、请求头
res = requests.get(start_url, headers=headers)
#获取到网页对象，对象里有各种方法可以查看
# 有状态码、有源码、有链接等等方法

"""
3、获取到源码后，根据分析，找出定位的标签
首先实例化bs4
"""
soup = BeautifulSoup(res.text, 'html.parser')



"""
4、使用find方法进行查询定位   attrs是属性提取，  class=f-hide  也就是key value形式
"""
ul = soup.find(name='ul', attrs={'class': "f-hide"})



"""
5、ul搜索到之后  再查询定位到标签里面的a标签
"""
a_list = ul.findAll('a')



"""
6、因findAll提取的结果是一个列表类型，所以需要遍历每个元素，再进行提取链接和文本
"""
for a in a_list:
    music_name = a.string.strip()  # 获取文本信息  音乐名称   .strip()这个方法表示删除字符串两边的空格换行
    music_href = a.attrs.get('href')  # 获取属性链接  和  a.attrs['href'] 同理
    music_requests_url = download_url + music_href[6:] # 把字符串进行切割， 从第六个字符往后的都要, 然后拼接再下载链接后


    """
    7、请求下载链接地址
    """
    down_res = requests.get(music_requests_url, headers=headers)


    """
    8、open打开一个文件，将下载的内容写入这个文件内
    """
    f = open('{}.mp3'.format(music_name), 'bw')  # 操作符是使用 二进制方法：  bw 写入
    f.write(down_res.content)   #down_res.content 意思为：跟去响应对象提取二进制内容（根据请求对象提取字节内容）
    f.close()   # 关闭这个文件
    print('下载成功')






